#include <bits/stdc++.h>
#define int long long
using namespace std;
int graph[8][8];



int find(int parent[8], int x) {
	while (parent[x] != x) { // 注意这里面一定是 while 不是 if
		x = parent[x];
	}
	return x;
}


void un(int parent[8], int x, int y){
	int root1 = find(parent, x);
	int root2 = find(parent, y);
	if (root1 != root2) {
		// 进行合并
		parent[root2] = root1; // 都合并为 root1
	}
}


int check(int parent[8], vector<int> & v) {
	for (auto x: v) {
		for (auto y: v) {
			if (find(parent, x) != find(parent, y)) {
				return 0;
			}
		}
	}
	return 1;
}

void solve(){
	graph[1][2] = 1;graph[1][3] = 1;
	graph[2][1] = 1;graph[2][4] = 1;graph[2][5] = 1;
	graph[3][1] = 1;graph[3][4] = 1;graph[3][6] = 1;
	graph[4][2] = 1;graph[4][3] = 1;graph[4][5] = 1;graph[4][6] = 1;
	graph[5][2] = 1;graph[5][4] = 1;graph[5][7] = 1;
	graph[6][3] = 1;graph[6][4] = 1;graph[6][7] = 1;
	
	int ans = 0;
	
	// 位 枚举
	for (int i=1;i<=(1<<7)-1;i++) {
		vector<int>v;
		for (int j=0;j<7;j++) { // 注意这里面一定要从 1 开始
			if (((i>>j)&1)==1) { // 选中了 
				v.push_back((j+1));
			}
		}
		
		// 开始判断是否是连续的
		int parent[8];
		for (int i=1;i<=7;i++) {
			parent[i] = i;
		}
		for (auto x: v) {
			for (auto y: v) {
				if (graph[x][y]) { 
					// 连通
					un(parent, x, y);
				}
			}
		}
		
		if (check(parent, v)) {
			// 连通
			ans++;
		}
	}
	cout << ans << '\n';
}



signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int t;
//	cin >> t;
	t=1;
	while (t--) {
		solve();
	}
	
	return 0;
}
